﻿/*
 ***************************************************************************
 * Microsoft Visual C# .NET
 * 名称：       Shpm.App.Input.Dao.HealthTherapyDao
 * 类型：       康复理疗管理画面 数据库操作层
 * 功能说明：   康复理疗功能 检索 登录
 * 作者：       章 昕
 * 创建日期：   2007/09/12
 * 修改日期     修改者      修改内容
 * 
 * 
 * ---
 ***************************************************************************
*/
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections;
using Shpm.System.Db;
using Shpm.App.Commons.Db.Beans.Master;
using Shpm.App.Commons.Db.Beans.Inp;
using Shpm.App.Input.Bean;
using Shpm.App.Master.Bean;


/// <summary>
/// Summary description for HealthTherapyDao
/// </summary>
namespace Shpm.App.Input.Dao
{
    public class HealthTherapyDao : ShpmBaseDao
    {
        // 医生级别
        // 上级医生
        public const string DOCTOR_LEVEL_SUP = "1";
        // 普通医生
        public const string DOCTOR_LEVEL_NOR = "0";
        // 医生职责
        public const string JOB_DOCTOR_ = "10";

        public HealthTherapyDao() { }

        // 从数据字典中取得画面列表项内容
        public const string FIND_BY_CATALOG = "CommonDictionary.FindByCatalog";


        // 治疗计划 list
        public const string LIST_MEMBER_CURE = "HealthTherapy.ListMemberCure";

        // 治疗计划 find
        public const string FIND_BY_MEMBER_CURE_ID = "HealthTherapy.FindByMemberCureId";

        // 治疗计划 find
        public const string FIND_BY_MEMBER_CURE = "HealthTherapy.FindByMemberCure";

        // 会员治疗计划(新规) find
        public const string FIND_BY_MEMBER_ID = "HealthTherapy.FindByMemberId";

        // 治疗计划 insert
        public const string INSERT_MEMBER_CURE = "HealthTherapy.InsertMemberCure";

        // 治疗计划 update
        public const string UPDATE_MEMBER_CURE = "HealthTherapy.UpdateMemberCure";

        // 治疗计划 delete
        public const string DELETE_MEMBER_CURE = "HealthTherapy.DeleteMemberCure";

        // 当前治疗计划下所有详细 delete
        public const string DELETE_MEMBER_CURE_DETAIL_ALL = "HealthTherapy.DeleteMemberCureDetailAll";



        // 治疗信息详细 list
        public const string LIST_MEMBER_CURE_DETAIL = "HealthTherapy.ListMemberCureDetail";

        // 治疗信息详细 find
        public const string FIND_BY_MEMBER_CURE_DETAIL_ID = "HealthTherapy.FindByMemberCureDetailId";

        // 治疗信息详细 find
        public const string FIND_BY_MEMBER_CURE_DETAIL = "HealthTherapy.FindByMemberCureDetail";        

        // 治疗信息详细 insert
        public const string INSERT_MEMBER_CURE_DETAIL = "HealthTherapy.InsertMemberCureDetail";

        // 治疗信息详细 update
        public const string UPDATE_MEMBER_CURE_DETAIL = "HealthTherapy.UpdateMemberCureDetail";

        // 治疗信息详细 delete
        public const string DELETE_MEMBER_CURE_DETAIL = "HealthTherapy.DeleteMemberCureDetail";

        
        // 治疗信息详细 check 权限
        public const string CHECK_MEMBER_DOCTOR = "HealthTherapy.CheckMemberDoctor";

        // 治疗信息详细 check 权限
        public const string CHECK_MEMBER_DOCTOR_METHOD = "CheckMemberDoctor";

        // 治疗计划 find
        public const string FIND_BY_MEMBER_CURE_ID_METHOD = "FindByMemberCureId";

        // 治疗计划结束时间check 
        public const string CHECK_END_DATE_METHOD = "CheckEndDate";

        // 治疗计划结束时间 check
        public const string CHECK_END_DATE = "HealthTherapy.CheckEndDate";

        // 治疗计划下次时间
        public const string GET_PLAN_NEXT_DATE = "HealthTherapy.GetPlanNextDate";        
       
        // 下次治疗计划时间 check 
        public const string CHECK_PLAN_NEXT_DATE = "HealthTherapy.CheckNextDate";

        // 上级医生监管期限是否已经过期 check 
        public const string CHECK_SUP_DOC_DATE = "HealthTherapy.CheckSupDocDate";

        // 职员职务check
        public const string GET_EMPLOYEE_JOB = "PersonEmployee.LstEmployee";
        public PersonEmployeeBean GetEmployeeJob(PersonEmployeeBean paramBean)
        {
            return (PersonEmployeeBean)base.QueryForObject(GET_EMPLOYEE_JOB, paramBean);
        }

        /*
         *名称： FindByCatalog
         *功能： 取得数据字典列表对象。
         *参数： paramBean - 检索参数
         *返回： 数据字典列表 
         *说明： 从数据字典中取得画面列表项内容
        */
        public IList FindByCatalog(CommonDictionaryBean paramBean)
        {
            return base.QueryForList(FIND_BY_CATALOG, paramBean);
        }

        /*
         *名称： CheckMemberDoctor
         *功能： 取得会员医生列表对象。
         *参数： paramBean - 检索参数
         *返回： 会员医生列表 
         *说明： 从会员医生中取得画面列表项内容
        */
        public IList CheckMemberDoctor(MstMemberDoctorBean paramBean)
        {
            return base.QueryForList(CHECK_MEMBER_DOCTOR, paramBean);
        }

        /*
        *名称： CheckEndDate
        *功能： 取得治疗计划列表对象。
        *参数： paramBean - 检索参数
        *返回： 治疗计划列表 
        *说明： 从治疗计划中取得画面列表项内容
       */
        public IList CheckEndDate(HealthTherapyBean paramBean)
        {
            return base.QueryForList(CHECK_END_DATE, paramBean);
        }

        /*
        *名称： CheckPlanNextDate
        *功能： 取得治疗详细列表对象。
        *参数： paramBean - 检索参数
        *返回： 治疗详细列表 
        *说明： 从治疗详细划中取得画面列表项内容
       */
        public IList CheckPlanNextDate(HealthTherapyDetailBean paramBean)
        {
            return base.QueryForList(CHECK_PLAN_NEXT_DATE, paramBean);
        }

        /*
        *名称： CheckSupDocDate
        *功能： 取得治疗详细列表对象。
        *参数： paramBean - 检索参数
        *返回： 治疗详细列表 
        *说明： 从治疗详细划中取得画面列表项内容
       */
        public IList CheckSupDocDate(HealthTherapyDetailBean paramBean)
        {
            return base.QueryForList(CHECK_SUP_DOC_DATE, paramBean);
        }
        
        /*
         *名称： ListMemberCure
         *功能： 取得治疗计划列表对象。
         *参数： paramBean - 检索参数
         *返回： 治疗计划列表 
         *说明： 从治疗计划中取得画面列表项内容
        */
        public IList ListMemberCure(HealthTherapyBean paramBean)
        {
            return base.QueryForList(LIST_MEMBER_CURE, paramBean);
        }

       /*
        *名称： FindByMemberCureId
        *功能： 取得治疗计划对象。
        *参数： paramBean - 检索参数
        *返回： 治疗计划对象 
        *说明： 取得治疗计划信息 get by id
       */
        public HealthTherapyBean FindByMemberCureId(HealthTherapyBean paramBean)
        {
            return (HealthTherapyBean)base.QueryForObject(FIND_BY_MEMBER_CURE_ID, paramBean);
        }

       /*
        *名称： FindByMemberCure
        *功能： 取得治疗计划对象。
        *参数： paramBean - 检索参数
        *返回： 治疗计划对象 
        *说明： 取得治疗计划信息 get by id
       */
        public HealthTherapyBean FindByMemberCure(HealthTherapyBean paramBean)
        {
            return (HealthTherapyBean)base.QueryForObject(FIND_BY_MEMBER_CURE, paramBean);
        }

       /*
        *名称： FindByMemberCure
        *功能： 取得治疗计划对象。
        *参数： paramBean - 检索参数
        *返回： 治疗计划对象 
        *说明： 取得治疗计划信息 get by id
       */
        public HealthTherapyBean FindByMemberId(HealthTherapyBean paramBean)
        {
            return (HealthTherapyBean)base.QueryForObject(FIND_BY_MEMBER_ID, paramBean);
        }

        /*
         *名称： Insert
         *功能： 登录治疗计划对象。
         *参数： paramBean - 登录对象
         *返回： 登录的对象
         *说明： 治疗计划 insert 
        */
        public Object Insert(HealthTherapyBean paramBean)
        {
            return base.Insert(INSERT_MEMBER_CURE, paramBean);
        }

        /*
         *名称： Update
         *功能： 更新治疗计划对象。
         *参数： paramBean - 更新对象
         *返回： 更新记录数
         *说明： 治疗计划 update 
        */
        public int Update(HealthTherapyBean paramBean)
        {
            return base.Update(UPDATE_MEMBER_CURE, paramBean);
        }

        /*
         *名称： Delete
         *功能： 删除治疗计划对象。
         *参数： paramBean - 删除对象
         *返回： 删除记录数
         *说明： 治疗计划 delete 
        */
        public int Delete(HealthTherapyBean paramBean)
        {
            return base.Delete(DELETE_MEMBER_CURE, paramBean);
        }

        /*
         *名称： DeleteDetailsInTherapy
         *功能： 删除当前治疗计划下所有详细。
         *参数： paramBean - 删除对象
         *返回： 删除记录数
         *说明： 当前治疗计划下所有详细
        */
        public int DeleteDetailsInTherapy(HealthTherapyBean paramBean)
        {
            return base.Delete(DELETE_MEMBER_CURE_DETAIL_ALL, paramBean);
        }

        /*
        *名称： DeleteCurTherapyPlan
        *功能： 删除一个治疗计划对象。
        *参数： paramBean - 删除对象
        *返回： 删除记录数
        *说明： 治疗计划 delete 
       */
        public int DeleteCurTherapyPlan(HealthTherapyBean paramBean)
        {
            int numDeleted = 0;

            try
            {
                // 开始事务 
                base.BeginTransaction();

                numDeleted = this.DeleteDetailsInTherapy(paramBean);
                numDeleted += this.Delete(paramBean);

                // 提交事务
                base.CommitTransaction();

            }
            catch (Exception e)
            {
                // 回滚事务
                base.RollBackTransaction();
                throw e;
            }
            return numDeleted;
        }


        /*
         *名称： ListMemberCureDetail
         *功能： 取得治疗信息详细列表对象。
         *参数： paramBean - 检索参数
         *返回： 信息详细列表 
         *说明： 从信息详细中取得画面列表项内容
        */
        public IList ListMemberCureDetail(HealthTherapyDetailBean paramBean)
        {
            return base.QueryForList(LIST_MEMBER_CURE_DETAIL, paramBean);
        }

        /*
         *名称： FindByMemberCureDetailId
         *功能： 取得治疗信息详细对象。
         *参数： paramBean - 检索参数
         *返回： 治疗信息对象 
         *说明： 取得治疗信息详细 get by id
        */
        public HealthTherapyDetailBean FindByMemberCureDetailId(HealthTherapyDetailBean paramBean)
        {
            return (HealthTherapyDetailBean)base.QueryForObject(FIND_BY_MEMBER_CURE_DETAIL_ID, paramBean);
        }

        /*
         *名称： FindByMemberCureDetail
         *功能： 取得治疗信息详细对象。
         *参数： paramBean - 检索参数
         *返回： 治疗信息对象 
         *说明： 取得治疗信息详细 get by id
        */
        public HealthTherapyDetailBean FindByMemberCureDetail(HealthTherapyDetailBean paramBean)
        {
            return (HealthTherapyDetailBean)base.QueryForObject(FIND_BY_MEMBER_CURE_DETAIL, paramBean);
        }

        /*
         *名称： Insert
         *功能： 登录治疗信息详细对象。
         *参数： paramBean - 登录对象
         *返回： 登录的对象
         *说明： 治疗信息详细 insert 
        */
        public Object Insert(HealthTherapyDetailBean paramBean)
        {
            return base.Insert(INSERT_MEMBER_CURE_DETAIL, paramBean);
        }

        /*
         *名称： Update
         *功能： 更新治疗信息详细对象。
         *参数： paramBean - 更新对象
         *返回： 更新记录数
         *说明： 治疗信息详细 update 
        */
        public int Update(HealthTherapyDetailBean paramBean)
        {
            return base.Update(UPDATE_MEMBER_CURE_DETAIL, paramBean);
        }

        /*
         *名称： UpdateComplete
         *功能： 更新治疗信息详细对象。
         *参数： paramBean - 更新对象
         *返回： 更新记录数
         *说明： 治疗信息详细 update 治疗完成的情况 新建下一个详细信息
        */
        public void UpdateComplete(HealthTherapyDetailBean paramBean)
        {
            try
            {
                // 开始事务 
                base.BeginTransaction();

                // 更新当前完成治疗
                paramBean.CureFlg = true;
                this.Update(paramBean);

                HealthTherapyDetailBean beanChk = new HealthTherapyDetailBean();
                beanChk.RowId = paramBean.RowId;
                beanChk = this.FindByMemberCureDetail(beanChk);
                if (beanChk != null && paramBean.NextDate != null)
                {
                    if (beanChk.EndDate == null
                        || paramBean.NextDate.Value.CompareTo(beanChk.EndDate.Value) <= 0)
                    {
                        // 新建下一条治疗详细
                        HealthTherapyDetailBean beanNew = new HealthTherapyDetailBean();
                        beanNew.CureId = paramBean.CureId;
                        beanNew.BespokeDate = paramBean.NextDate;
                        beanNew.BespokeTime = paramBean.NextTime;
                        beanNew.CureFlg = false;
                        beanNew.CancelFlg = false;
                        beanNew.EditCount = 0;
                        beanNew.UserId = paramBean.UserId;
                        this.Insert(beanNew);
                    }
                }

             

                // 提交事务
                base.CommitTransaction();
                
            }
            catch (Exception e)
            {
                // 回滚事务
                base.RollBackTransaction();
                throw e;
            }            
        }

        /*
         *名称： Delete
         *功能： 删除当前治疗信息详细。
         *参数： paramBean - 删除对象
         *返回： 删除记录数
         *说明： 删除当前治疗信息详细
        */
        public int Delete(HealthTherapyDetailBean paramBean)
        {
            return base.Delete(DELETE_MEMBER_CURE_DETAIL, paramBean);
        }


        /*
         *名称： GetPlanNextDate
         *功能： 取得治疗计划下次日期对象。
         *参数： paramBean - 检索参数
         *返回： 治疗计划下次日期对象 
         *说明： 取得治疗计划下次日期信息 
        */
        public HealthTherapyDetailBean GetPlanNextDate(HealthTherapyDetailBean paramBean)
        {
            return (HealthTherapyDetailBean)base.QueryForObject(GET_PLAN_NEXT_DATE, paramBean);
        }


        /*
         *名称： Insert
         *功能： 登录治疗计划对象。
         *参数： paramBean - 登录对象
         *返回： 登录的对象
         *说明： 治疗计划 insert 
        */
        public HealthTherapyBean InsertPlanTherapy(HealthTherapyBean paramBean)
        {
            try
            {
                // 开始事务 
                base.BeginTransaction();

                // 登记当前治疗计划
                Object retKey = this.Insert(paramBean);

                if (retKey != null)
                {
                    paramBean.CureId = Convert.ToInt32(retKey);
                    // 新建下一条治疗详细
                    HealthTherapyDetailBean beanNew = new HealthTherapyDetailBean();
                    beanNew.CureId = paramBean.CureId;
                    beanNew.BespokeDate = paramBean.BespokeDate;
                    beanNew.BespokeTime = paramBean.BespokeTime;
                    beanNew.CureFlg = false;
                    beanNew.CancelFlg = false;
                    beanNew.EditCount = 0;
                    beanNew.UserId = paramBean.UserId;
                    this.Insert(beanNew);
                }
                // 提交事务
                base.CommitTransaction();

            }
            catch (Exception e)
            {
                // 回滚事务
                paramBean = null;
                base.RollBackTransaction();
                throw e;
            }
            return paramBean;
        }

        /*
        *名称： Update
        *功能： 更新治疗计划对象。
        *参数： paramBean - 登录对象
        *返回： 登录的对象
        *说明： 治疗计划 insert 
       */
        public void UpdatePlanTherapy(HealthTherapyBean paramBean)
        {
            try
            {
                // 开始事务 
                base.BeginTransaction();

                // 更新当前治疗计划
                this.Update(paramBean);

                // 更新下一条治疗详细
                HealthTherapyDetailBean beanNext = new HealthTherapyDetailBean();
                beanNext.CureId = paramBean.CureId;
                beanNext = this.GetPlanNextDate(beanNext);
                if (beanNext != null)
                {
                    beanNext.BespokeDate = paramBean.BespokeDate;
                    beanNext.BespokeTime = paramBean.BespokeTime;
                    //beanNext.CureFlg = false;
                    //beanNext.CancelFlg = false;
                    //beanNext.EditCount = 0;
                    beanNext.UserId = paramBean.UserId;
                    this.Update(beanNext);
                }
                else
                {
                    beanNext = new HealthTherapyDetailBean();
                    beanNext.CureId = paramBean.CureId;
                    beanNext.BespokeDate = paramBean.BespokeDate;
                    beanNext.BespokeTime = paramBean.BespokeTime;
                    beanNext.CureFlg = false;
                    beanNext.CancelFlg = false;
                    beanNext.EditCount = 0;
                    beanNext.UserId = paramBean.UserId;
                    this.Insert(beanNext);
                }

                // 提交事务
                base.CommitTransaction();

            }
            catch (Exception e)
            {
                // 回滚事务                
                base.RollBackTransaction();
                throw e;
            }            
        }

    }
}
